package dao.impl;

import dao.SolicitacaoDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Solicitacao;

public class MemorySolicitacaoDAO implements SolicitacaoDAO {

    // Banco
    private ArrayList<Solicitacao> lista;
    private long seq;

    public MemorySolicitacaoDAO() {
        lista = new ArrayList<Solicitacao>();
        seq = 0;
    }

    public void inclui(Solicitacao umaSolicitacao) throws ObjetoDuplicadoException {

        for (Solicitacao solicitacao : lista) {
            if (solicitacao.equals(umaSolicitacao)) {
                throw new ObjetoDuplicadoException();
            }
        }
        umaSolicitacao.setId(++seq);
        lista.add(umaSolicitacao);
    }

    public void altera(Solicitacao umaSolicitacao) throws ObjetoNaoEncontradoException {
        boolean achou = false;

        for (Solicitacao solicitacao : lista) {
            if (solicitacao.igual(umaSolicitacao)) {
                umaSolicitacao.setId(solicitacao.getId());
                lista.remove(solicitacao);
                lista.add(umaSolicitacao);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(Solicitacao umaSolicitacao) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umaSolicitacao)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public Solicitacao recuperaUmaSolicitacao(long idSolicitacao) throws ObjetoNaoEncontradoException {
        Solicitacao umaSolicitacao = new Solicitacao();
        umaSolicitacao.setId(idSolicitacao);
        for (Solicitacao solicitacao : lista) {
            if (solicitacao.equals(umaSolicitacao)) {
                return solicitacao;
            }
        }


        throw new ObjetoNaoEncontradoException();
    }

    public List<Solicitacao> recuperaSolicitacoes() {
        return lista;

    }
}
